In computer science, a virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). Typically, a virtual machine monitor (VMM) manages allocation and virtualization of computer resources and performs context switching, as may be necessary, to cycle between various VMs.
A host machine (e.g., computer or server) is typically enabled to simultaneously run multiple VMs, where each VM may be used by a local or remote client. The host machine allocates a certain amount of the host's resources to each of the VMs. Each VM is then able to use the allocated resources to execute applications, including operating systems known as guest operating systems. The VMM virtualizes the underlying hardware of the host machine or emulates hardware devices.
Often times, a VM that is centrally hosted may require migration for a variety of reasons, including load balancing on the host server, maintenance of the host server, upgrades of software and/or hardware of the host server, and so on. Presently, solutions are offered for live migration of VMs that provide almost unnoticeable VM downtime to the end user of the VM. Yet, one problem that arises with current implementations of live migration of VMs is that they do not address how to live migrate the client-side resources associated with the VM, such as client-side agents used for remote rendering and connection protocols and other resources associated with the VM (such as a display, input devices (mouse, keyboard), USB devices, and storage devices).
Under current solutions, migration of these client resources is time-consuming and inefficient, as well as a significant interruption to the end user of the VM. As such, a solution for migration of VM client-side resources, with minimal interruption to the end user of the VM, would be beneficial.